﻿using SIIE_ERP.BaseDatos.Configuracion;
using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Login
{
    public static class Login_StoredProcedures
    {   
        public static Respuesta SP_Login(string Usuario, string Contrasena) {

            DataTable Usuarios = new DataTable();
            int ContarUsuarios = 0;
            int ContarUsuarios_Contrasena = 0;
            int index = 0;

            
            dbo_Sec_Usuario Sec_Usuarios = new dbo_Sec_Usuario();

            try
            {

                Usuarios = Sec_Usuarios.Get_Usuarios();
            }
            catch (Exception ex)
            {
                return new Respuesta(100, ex.Message); 
            }

            for (int i = 0; i < Usuarios.Rows.Count; i++) {

                if (Usuarios.Rows[i]["UserName"].ToString().Equals(Usuario))
                {
                    ContarUsuarios++;
                    index = i;
                }
            }

            if (ContarUsuarios == 1)
            {
                DateTime LastTime = DateTime.Parse(Usuarios.Rows[index]["Last_Time"].ToString());
                int Num_Intentos = Int32.Parse(Usuarios.Rows[index]["Num_Intentos"].ToString());

                if (Num_Intentos < 3 || LastTime.AddMinutes(5) < DateTime.Now)
                {
                    for (int i = 0; i < Usuarios.Rows.Count; i++)
                    {
                        if (Usuarios.Rows[i]["UserName"].ToString().Equals(Usuario) && Usuarios.Rows[i]["Password"].ToString().Equals(Contrasena))
                        {
                            ContarUsuarios_Contrasena++;
                            index = i;
                        }
                    }

                    if (ContarUsuarios_Contrasena == 1)
                    {
                        DateTime Fecha_Licencia = DateTime.Parse(Usuarios.Rows[index]["Licencia"].ToString());
                        Sec_Usuarios.Update_Usuario_Num_Intentos(Usuarios.Rows[index]["Id_Usuario"].ToString(), 0);

                        if (Fecha_Licencia < DateTime.Now)
                        {
                            return new Respuesta(4, "Su licencia ha expirado");
                        }
                        else if (Fecha_Licencia.AddDays(-10) < DateTime.Now)
                        {
                            return new Respuesta(5, "Su licencia está a punto de expirar");
                        }
                        else
                        {
                            return new Respuesta(6, "Usuario y Contraseña correctos");
                        }
                    }
                    else
                    {
                        Sec_Usuarios.Update_Usuario_Num_Intentos(Usuarios.Rows[index]["Id_Usuario"].ToString(), Int32.Parse(Usuarios.Rows[index]["Num_Intentos"].ToString()) + 1);
                        return new Respuesta(3, "Contraseña Incorrecta");
                    }
                }
                else
                {
                    return new Respuesta(2, "Esperar al menos 5 minutos para poder inciciar sesión de nuevo");
                }
            }
            else 
            {
                return new Respuesta(1, "Usuario Incorrecto");
            }
        }
    }
}
